/**
 * 
 */
package persistence.Factories;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import org.apache.log4j.Logger;

import metier.Bean;
import persistence.DAO.DAO;

/**
 * @author hozakan
 *
 */
public class DAOSQLFactory implements DAOFactory {
	
	private final static Logger LOGGER = Logger.getLogger(DAOSQLFactory.class);

	@Override
	public DAO getDAO(Bean bean) {
		DAO dao = null;
//		if (bean.getClass().equals(DAOSQLUser.class)) {
//			dao = DAOSQLUser.getInstance();
//		} else if (bean.getClass().equals(DAOSQLArticle.class)) {
//			dao = DAOSQLArticle.getInstance();
//		}
		try {
			String className = "persistence.DAO.SQL.entities.DAOSQL"+bean.getClass().getSimpleName();
			Class clazz = Class.forName(className);
			Method m = clazz.getDeclaredMethod("getInstance", new Class[] {});
			dao = (DAO) m.invoke(bean, new Object[] {});
		} catch (SecurityException e) {
			LOGGER.error("Impossible d'obtenir cette méthode");
		} catch (NoSuchMethodException e) {
			LOGGER.error("La méthode recherchée n'existe pas");
		} catch (IllegalArgumentException e) {
			LOGGER.error("Les arguments de la méthode appelée sont mal typés");
		} catch (IllegalAccessException e) {
			LOGGER.error("L'accès à la méthode appelée est restreint");
		} catch (InvocationTargetException e) {
			LOGGER.error("Une méthode d'un objet inexistant a été appelée");
		} catch (ClassNotFoundException e) {
			LOGGER.error("La classe demandée n'existe pas");
		}
		return dao;
	}
	
}
